package com.lebang.controller;

import com.lebang.common.Login;
import com.lebang.common.Shirox;
import com.lebang.entity.sys.LbbGroup;
import com.lebang.entity.sys.LbbGroupRole;
import com.lebang.entity.sys.Role;
import com.lebang.model.vo.GroupVo;
import com.lebang.model.vo.SearchVo;
import com.lebang.service.GroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 分组管理
 * @className UserController
 * @author weizx  
 * @date 2018年7月9日 下午4:45:09
 */
@Controller
public class GroupController {
	
	@Autowired
	private GroupService groupService;


	
	/**
	 * 分组列表
	 * @author weizx  
	 * @date 2018年7月11日 下午5:44:31  

	 * @return
	 */
	@Shirox(value="group_list")@Login
	@RequestMapping(value = {"/group/list"}, method = { RequestMethod.GET })
	public String list() {
		return "/group/list";
	}
	
	/**
	 * 新增
	 * @author weizx  
	 * @date 2018年7月11日 下午8:45:58  
	 * @param model
	 * @return
	 */
	@Login
	@RequestMapping(value = {"/group/insert"}, method = { RequestMethod.GET })
	public String insert(Model model) {
		List<Map<String, Object>> groups = groupService.getTopGroups();
		model.addAttribute("groups", groups);
		return "/group/edit";
	}
	
	/**
	 * 编辑
	 * @author weizx  
	 * @date 2018年7月11日 下午8:45:58  
	 * @param model
	 * @return
	 */
	@Login
	@RequestMapping(value = {"/group/edit/{groupId}"}, method = { RequestMethod.GET })
	public String edit(@PathVariable String groupId, Model model) {
		LbbGroup group=groupService.getByGroupId(groupId);
		List<Map<String, Object>> groups = groupService.getTopGroups();
		model.addAttribute("group", group);
		model.addAttribute("groups", groups);
		return "/group/edit";
	}
	
	/**
	 * 分组角色
	 * @author weizx  
	 * @date 2018年7月12日 下午12:01:48
	 * @param model
	 * @return
	 */
	@Login
	@RequestMapping(value = {"/group/role/{groupid}"}, method = { RequestMethod.GET })
	public String role(@PathVariable String groupid, Model model) {
		List<Role> roles = groupService.getRoles(groupid);
		model.addAttribute("roles", roles);
		model.addAttribute("groupid", groupid);
		return "/group/role";
	}
	
	/**
	 * 分组列表
	 * @author weizx  
	 * @date 2018年7月11日 下午5:45:04
	 * @return
	 */
	@Shirox(value="group_list")@Login
	@RequestMapping(value = {"/group/list"}, method = { RequestMethod.POST })
	@ResponseBody
	public Map<String, Object> list(SearchVo vo) {
		Map<String, Object> data = groupService.list(vo);
		return data;
	}
	
	/**
	 * 保存分组
	 * @author weizx  
	 * @date 2018年7月12日 上午10:52:35  
	 * @param vo
	 * @return
	 */
	@RequestMapping(value = {"/group/save"}, method = { RequestMethod.POST })
	@ResponseBody@Login
	public String save(GroupVo vo) {
		if (vo.getGroupId()==null || "".equals(vo.getGroupId())) {
			groupService.insert(vo);
		} else {
			if (vo.getGroupId().equals(vo.getParentId())) {
				return "不能基于自己创建！";
			}
			if (null!=vo.getParentId() && !"".equals(vo.getParentId())) {
				if(groupService.countByParentId(vo.getGroupId())>0) {
					return "不能基于多级分组创建！";
				}
			}
			groupService.update(vo);
		}
		return "保存成功！";
	}
	
	/**
	 * 删除
	 * @author weizx  
	 * @date 2018年7月12日 上午11:42:08  
	 * @param groupId
	 * @return
	 */
	@RequestMapping(value = {"/group/del/{groupId}"}, method = { RequestMethod.POST })
	@ResponseBody@Login
	public String del(@PathVariable String groupId) {
		LbbGroup group=groupService.getByGroupId(groupId);
		if(group==null) {
			return "分组不存在";
		}
		Map<String, Object> params = new HashMap<String, Object>(1);
		params.put("parent_id", groupId);
		if(groupService.countByParentId(groupId)>0) {
			return "请先移除上层分组！";
		}
		groupService.delete(group);
		return "删除成功！";
	}
	
	/**
	 * 分组角色
	 * @author weizx  
	 * @date 2018年7月12日 下午1:11:33
	 * @param groupid
	 * @return
	 */
	@RequestMapping(value = {"/group/role"}, method = { RequestMethod.POST })
	@ResponseBody@Login
	public String roles(@RequestParam("roleid") String roleid, @RequestParam("groupid") String groupid) {
		LbbGroupRole gr=groupService.getByRoleIdAndGroupId(roleid,groupid);
		if(gr==null) {
			gr = new LbbGroupRole();
			gr.setGroupId(groupid);
			gr.setRoleId(roleid);
			groupService.insertRole(gr);
		} else {
			groupService.deleteRole(gr);
		}
		return "OK";
	}
}
